之前提到為什麼Shellcraft會用到int 0x80,這個其實和System call有關,可以搜尋System call table,不同作業系統和不同位元的系統,System call的參數都不一樣,我們來介紹一下System call。
System call的流程
實際舉個例子
如果一個組合語言這樣寫
這個組合語言主要的程式在_start內,它先定義了EAX等於4,在x86 Linux System call中 EAX 為4等於sys_write,如果 EAX 設定為4,那須要定義EBX、ECX和EDX。
下一行EBX定義為1,EBX為1是標準輸出stdout,如果為0則是標準輸入stdin,為2是標準錯誤stderr。
再來定義了ECX是輸出的字串,最後定義EDX為輸出的大小,在System call table當中會將ECX寫成const char *,EDX寫成size_t。
最後就是我們在Shellcraft也有看到的int 0x80,系統呼叫,系統就會將上面的參數通通吃進去,分析後知道我們要做標準輸出,最後輸出出Hello, world!字串。
最後將 EAX 設為1,在System call中 EAX 為1表示sys_exit結束的意思,而 EAX 為1時需要 EBX 參數,所以將 EBX 清空後做系統呼叫。
這就是重要的System call,未來在做Pwn或Reverse都需要知道的知識。